import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:netstorage/pages/home.dart';
import 'package:netstorage/pages/login.dart';
import 'package:netstorage/widget/hi_webview.dart';

class NavigatorUtils {
  // 在无法获取项目 BuildContext 时采用本成员变量
  // 例如在 dao 中是无法获取 BuildContext 的
  // 需要在 HomePage 中初始化（Home widget）
  static BuildContext? _context;

  // 更新私有成员变量
  static updateContext(BuildContext context){
    NavigatorUtils._context = context;
  }

  // 跳转到指定页面
  static push(BuildContext context, Widget page){
    Navigator.push(context, MaterialPageRoute(builder: (context) => page));
  }

  // 跳转到首页，不可通过后退操作返回到登录页面
  static goHome(BuildContext context){
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => const Home()));
  }

  // 跳转到登录页面
  static goLogin(){
    if(_context == null) throw Exception('在调用方法 updateContext 后才能调用本方法');
    Navigator.pushReplacement(_context!, MaterialPageRoute(builder: (context) => const Login()));
  }

  // 跳转到登录页面，不可通过后退操作返回到之前的页面
  static logout(){
    if(_context == null) throw Exception('在调用方法 updateContext 后才能调用本方法');
    Navigator.pushReplacement(_context!, MaterialPageRoute(builder: (context) => const Login()));
  }

  static logoutc(BuildContext context){
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => const Login()));
  }

  // 返回上一页
  static pop(BuildContext context){
    // if(!Navigator.canPop(context)) return;
    // Navigator.pop(context);

    // 2025年7月8日 13:00:46 测试H5页面回退键的功能：
    // 从 bing 首页回退时会调用下面的 if 两次，导致退出 app - 原本设计是退回到app首页
    // 从 qq.com 首页回退时不会出现上面的问题 - 达到了预期，回退到 app 首页
    // 页面栈中还有上一级页面，则返回上一级页面
    if(Navigator.canPop(context)) {
      Navigator.pop(context);
    } else{
      SystemNavigator.pop();// 没有则退出app
    }
  }

  // 跳转到指定URL的H5页面
  static jumpH5({required String url, BuildContext? context, String? title,bool? hideAppBar, String? statusBarColor}){
    //#region 确保context不为空
    BuildContext? safeContext;
    if(context == null) safeContext = _context;
    else safeContext = context;
    if(safeContext == null){
      print('context is null, can not jump to h5 page!');
      return;
    }
    //#endregion
    //#region 跳转到自定义 webview 中并打开指定URL页面
    Navigator.push(safeContext, MaterialPageRoute(builder: (context) => HiWebview(
      url: url,
      statusBarColor: statusBarColor,
      hideAppBar: hideAppBar,
      title: title,
    )));
    //#endregion
  }
}